﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace GestioneTraccia
{
   static class GestioneFile
    {
        static string patch = @"c:\document\gino\";
        static string NomeFile = "Gestraccia.txt";
        static int[] lunghezze = { 8, 25, 20, 10, 4, 2 };
        public static void Makedirectory()
        {
            try
            {
                Directory.CreateDirectory(patch);
                FileStream fs = File.Create(patch + NomeFile);
                fs.Close();
            }catch(IOException e)
            {
                Console.WriteLine(e.Message);
            }
        }
        public static void ScriviFile(Socio s)
        {
            try
            {
                string cognome = s.Cognome;
                string nome = s.Nome;
                string età = s.Età.ToString();
                string quotaIsc = s.QuotaIsc.ToString();
                string annoIsc = s.AnnoIsc.ToString();
                string numeroTess = s.NumeroTess;

                string record;

                // controllo dati
                if (numeroTess.Length > lunghezze[0])
                {
                    numeroTess = numeroTess.Remove(lunghezze[0]);
                }
                if (cognome.Length > lunghezze[1])
                {
                    cognome = cognome.Remove(lunghezze[1]);
                }
                if (nome.Length > lunghezze[2])
                {
                    nome = nome.Remove(lunghezze[2]);
                }
                if (quotaIsc.Length > lunghezze[3])
                {
                    quotaIsc = quotaIsc.Remove(lunghezze[3]);
                }
                if (annoIsc.Length > lunghezze[4])
                {
                    annoIsc = annoIsc.Remove(lunghezze[4]);
                }
                if (età.Length > lunghezze[5])
                {
                    età = età.Remove(lunghezze[5]);
                }

                record = numeroTess.PadRight(lunghezze[0], ' ') + cognome.PadRight(lunghezze[1], ' ') + nome.PadRight(lunghezze[2], ' ') + quotaIsc.PadRight(lunghezze[3], ' ') +
                    annoIsc.PadRight(lunghezze[4], ' ') + età.PadRight(lunghezze[5], ' ')+System.Environment.NewLine;
                StreamWriter sw = new StreamWriter(patch + NomeFile,true);
                sw.Write(record);
                sw.Close();
            }
            catch (IOException e)
            {
                Console.WriteLine(e.Message);
            }
        }
        static public List<Socio> Leggi()
        {
            try
            {
                List<Socio> soci = new List<Socio>();
                string record;
                string[] campi;
                StreamReader sr = new StreamReader(patch + NomeFile);
                while ((record = sr.ReadLine()) != null)
                {
                    campi = RicavaCampi(record);
                    soci.Add(new Socio(campi[1], campi[2], Convert.ToInt32(campi[5]), Convert.ToDouble(campi[3]), Convert.ToInt32(campi[4]), campi[0]));
                }

                return soci;

            }catch(IOException e)
            {
                Console.WriteLine(e.Message);
            }
            return null;

        }
        static private string[] RicavaCampi(string record)
        {          
                string[] campi = new string[lunghezze.Length];
                int pos = 0;
                int i = 0;
                int j = 0;
                do
                {
                    campi[j] = record.Substring(pos, lunghezze[i]);
                    campi[j] = campi[j].TrimEnd(' ');
                    pos += lunghezze[i];
                    j++;
                    i++;
                } while (i < lunghezze.Length);
                return campi;
        }
            
        
    }
}
